JavaSE 自带的注解
我们可以自定义一个类,其中定义了一个方法,并用Deprecated注解去标注该方法已经过时,可以看到在main方法中调用该方法会报出警告.1
2
3
4
5
6
7
8
9
10
11public class AnnotationDemo1 {
public static void main(String[] args) {
//此时可以看出下面这句语句编译器是发出警告的
test1();
}
public static void test1(){}
}
但是用到java.lang包下的@SuppressWarnings注解就可以消除该警告:1
2
3
4
5
6
7
8
9
10
11
12public class AnnotationDemo1 {
"deprecation") (
public static void main(String[] args) {
//此时警告消除
test1();
}
public static void test1(){}
}
自定义注解实战
1.获取注解的信息
我们可以使用Intellij IDEA快速生成注解:
自定义注解类代码如下:
Description.java1
2
3
4
5
6
7
8
9import java.lang.annotation.*;
({ElementType.METHOD, ElementType.TYPE})
(RetentionPolicy.RUNTIME)
public Description {
String value();
}
引用注解类代码如下:
MyAnn1.java1
2
3
4
5
6
7
8
9
10
11
12"I am class annotation") (
public class MyAnn1 {
//这里会报错: @Description is nuo applicable to field,因为在定义注解时候我们没有在@Target中去定义field目标.所以我们
"I am field annotation") (
private String testField;
"I am method annotation") (
public String name() {
return null;
}
}
我们再写一个解析处理器去处理这些注解信息,其中main方法入口也在这里:
处理自定义注解的步骤:
- 首先用java 提供的反射方法获取类加载器
- 使用getAnnotation找到类下的注解,并获取其中已经定义的值.
- 再用类加载器的方法获取所有method,遍历判断是否有注解并获取到注解,从而获取到值.
ParseAnn.java
1 | import java.lang.reflect.Method; |
然后运行,可以看到程序运行结果和预想的一样:1
2I am class annotation
I am method annotation